From 8c97db9391900d766db99834c23c5e4b60cadf01 Mon Sep 17 00:00:00 2001 From: pgaddict Date: Tue, 5 Dec 2023 17:59:43 +0800 Subject: [PATCH v1 1/1] set eval targetrange in per-output-tuple exprcontext --- src/backend/executor/nodeModifyTable.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index 88eda012..fe57e592 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -3780,7 +3780,6 @@ ExecModifyTable(PlanState *pstate) * Reset per-tuple memory context used for processing on conflict and * returning clauses, to free any expression evaluation storage * allocated in the previous cycle. - * TODO: It sounds like FOR PORTION OF might need to do something here too? */ if (pstate->ps_ExprContext) ResetExprContext(pstate->ps_ExprContext); @@ -4472,9 +4471,7 @@ ExecInitModifyTable(ModifyTable *node, EState *estate, int eflags) forPortionOf = (ForPortionOfExpr *) node->forPortionOf; /* Eval the FOR PORTION OF target */ - if (mtstate->ps.ps_ExprContext == NULL) - ExecAssignExprContext(estate, &mtstate->ps); - econtext = mtstate->ps.ps_ExprContext; + econtext = GetPerTupleExprContext(estate); exprState = ExecPrepareExpr((Expr *) forPortionOf->targetRange, estate); targetRange = ExecEvalExpr(exprState, econtext, &isNull); -- 2.34.1